#include <iostream>

//namespace bit
//{
//  int a=4;
//}


//int a=3;

//1.命名冲突的问题
//局部域 全局域 命名空间域的验证
//void test1()
//{
//
//  std::cout<<"命名空间域4,a:"<<bit::a<<std::endl;
//  std::cout<<"全局域3,a:"<<a<<std::endl;
//  int a=1;//局部域
//  std::cout<<"全局域5,a:"<<::a<<std::endl;
//  std::cout<<"局部域1,a:"<<a<<std::endl;
//  {
//    int a=2;//局部域
//    std::cout<<"局部域2,a:"<<a<<std::endl;
//  }
//}

//2.命名空间可以定义:变量，函数，类型
//namespace bit
//{
//  int a=1;
//  void func(int a)
//  {
//    std::cout<<"函数a:"<<a<<std::endl;
//  }
//  class Tree
//  {
//    public:
//      int a=3;
//  };
//}

//void test2()
//{
//  std::cout<<"变量a:"<<bit::a<<std::endl;
//  bit::func(2);
//  bit::Tree a;
//  std::cout<<"类a:"<<a.a<<std::endl;
//}


////3.命名空间的嵌套与合并
//namespace bit
//{
//  int a=1;
//  namespace bit
//  {
//    int a=2;
//    namespace bit{
//      int a=3;
//    }
//  }
//}
//
//namespace bit
//{
//  int a=4;
//}
//
//void test3()
//{
//  std::cout<<bit::a<<std::endl;
//  std::cout<<bit::bit::a<<std::endl;
//  std::cout<<bit::bit::bit::a<<std::endl;
//}

//4.命名空间的展开:1.展开整个命名空间 2.展开某个指定定义
namespace bit
{
  int a=1;
  namespace bit
  {
    int a=2; 
  }
}
using namespace bit::bit;

void test3()
{
  std::cout<<&a<<std::endl;
  std::cout<<&bit::a<<std::endl;
  std::cout<<&bit::bit::a<<std::endl;
}

int main()
{
  test3();
  return 0;
}
